
// 声明一个对象(class-level)
function Bull( name ){
    // 采用 "this.属性名" 方式声明的属性属于实例，因此被称作【实例属性】
    this.name = name ;
    // 采用 "this.函数名" 方式声明的函数属于实例，因此被称作【实例函数】
    this.introduce = function(){
        console.log( '大家好，我是' + this.name );
    }
}

// 采用 "对象名.属性名" 声明的属性是属于 对象(class-level)的，被称作【静态属性】
Bull.school = '大肥牛学校' ;

// 通过 "对象名.属性名" 形式可以访问【静态属性】
console.log( Bull.school );

// 采用 "对象名.函数名" 声明的函数是属于 对象(class-level)的，被称作【静态函数】
Bull.show = function(){
    // 在 静态函数 中 访问 静态属性
    console.log( Bull.school );
}

// 通过 "对象名.函数名" 形式可以调用【静态函数】
Bull.show();

console.log( '- - - - - - - - - - - - - - -' );

// 记住 变量 x 中存储的是堆内存中某个 Bull对象(class-level)的实例的 首地址 (地址也是数值)
let x = new Bull( '牛魔王' );
console.log( x.name ); // 通过 "引用变量名.属性名" 来访问实例属性
x.introduce(); // 通过 "引用变量名.函数名" 来调用实例函数